package com.keyinong.dingcan.pay;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Random;

import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.alipay.sdk.app.PayTask;
import com.keyinong.dingcan.R;
import com.keyinong.dingcan.Tools.HttpTools;
import com.keyinong.dingcan.view.FanqiedingcanActivity;
import com.keyinong.dingcan.view.UsecouponsActivity;
import com.loopj.android.http.JsonHttpResponseHandler;

/**个人支付宝支付*/

public class PayDemoActivity extends FragmentActivity {

	// 商户PID
	public static final String PARTNER = "2088021553844659";
	// 商户收款账号
	public static final String SELLER = "13567154389@163.com";
	// 商户私钥，pkcs8格式
	public static final String RSA_PRIVATE = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAM0/MR9V0JN2WxU+j8UzatC4A0WC2ZuGfKi5760T4wawOT5h4wgyaJyc8Zg23JtRZmbPD4Ez1nKYijBUD2rsg5TxvJQwiEn7F3Sdj2EoMXLXSmF3+dwFvss8bLrP/H1f1UF8D7w9Nc3brCQmTLsWRp5WhP83osN2LgZF0CabOz+JAgMBAAECgYAovb9xeeZSLy87U1TUjzVHww8bMDMj1RlPoMD7uTPacwaZ5HJdgSwU0m5+iX1W81yBUd7BBdoumyrrFvSMg/BGOB0g7HDb8krN6RIyfen4gSkdsamYv8knaPpR3AAzWUSyQ2qE/PIB2NkllaENJFv1snlhAJFFZL+HnpgwckSjhQJBAPxph3NKqRA7PMlBiJyVKB6Mp6uJl/VCWIQiVdLvsfmhUoas0IHqRwmlbY3/SdB1RJli40ZYpATs2FUMHDl1MnsCQQDQKgnk79nONoUC9crYx/1w3MMNSzPrnDSmlclnCcbdKN0RgvMkLricPpea/Gj/5byOfkZU27nmZ0AfA7NGayjLAkB97kSGz9QDZhqQqmJ3BK+sdi5dFdu7oGs7GUpKYA4iZksfJ+8rMfBZLrC27IwuNaORB1YuzaCfWG8iF1WpkQArAkB1CI2Thz4fcAuMRICNLLNS9us62CMSvjnjxqb7JUYHJWhU5hipKRNl1NMLsgmehZ1jR59nKjn0TeyBA2WRm8HNAkEAtRpz1YcxfXi5VqtE1uEpn0X64hxODuaCEs+s9xq1gLLNxVLZUYGXWNszEh/jABJg49VHla/G/A+jBK1hmUjgmA==";
	// 支付宝公钥
	public static final String RSA_PUBLIC = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB";
	private static final int SDK_PAY_FLAG = 1;
	/**价格*/
	private TextView tv_price;
	private String price;
	/**返回*/
	private ImageButton ib_back;
	/**网络请求*/
	HttpTools httptools=null;
	private String off;
//	private String price;
	private String couponid="0";
	private TextView tv_shengyu;
	private RelativeLayout rl_youhuiquan;
	private String  token;
	private String  orderid;
	private int  length;
	View iscatview = null;
	private boolean flag=true;

	@SuppressLint("HandlerLeak")
	private Handler mHandler = new Handler() {
		@SuppressWarnings("unused")
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case SDK_PAY_FLAG: {
				PayResult payResult = new PayResult((String) msg.obj);
				/**
				 * 同步返回的结果必须放置到服务端进行验证（验证的规则请看https://doc.open.alipay.com/doc2/
				 * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
				 * docType=1) 建议商户依赖异步通知
				 */
				String resultInfo = payResult.getResult();// 同步返回�?要验证的信息

				String resultStatus = payResult.getResultStatus();
				// 判断resultStatus 为�??9000”则代表支付成功，具体状态码代表含义可参考接口文�?
				if (TextUtils.equals(resultStatus, "9000")) {
					Toast.makeText(PayDemoActivity.this, "支付成功",
							Toast.LENGTH_SHORT).show();
					if (!couponid.equals("0")) {
						useconpons();
						Log.i("zq", "useconpons-------");
					}else {
						alipay();
						Log.i("zq", "alipay-------");
					}
//					orderid = getIntent().getStringExtra("orderid");
//					Log.i("shi", "id---"+orderid);
//					if(httptools==null){
//						httptools = new HttpTools(getApplicationContext());
//					}
//					httptools.aliPay(orderid, new JsonHttpResponseHandler(){
//						public void onSuccess(int statusCode, Header[] headers,
//								JSONObject response) {
//							// TODO Auto-generated method stub
//							super.onSuccess(statusCode, headers, response);
//							try {
//								boolean code = response.getBoolean("code");
//								String msg = response.getString("msg");
////								Log.i("zq", "balance---"+response.toString());
//								if (code == true) {
////									String data=response.getString("data");
////									Toast.makeText(PayDemoActivity.this, msg, Toast.LENGTH_SHORT).show();
//									//										view.setBackgroundResource(R.drawable.shouchang1);
////									tv_balance.setText("�?"+data);
//									Intent intent = new Intent();
//									intent.setClass(getApplicationContext(), FanqiedingcanActivity.class);
//									startActivity(intent);
//									finish();
//								} else {
//									Toast.makeText(PayDemoActivity.this, msg, Toast.LENGTH_SHORT).show();
//								}
//							} catch (JSONException e) {
//								// TODO Auto-generated catch block
//								e.printStackTrace();
//							}
//
//						}
//					});
					
				} else {
					// 判断resultStatus 为非"9000"则代表可能支付失�?
					// "8000"代表支付结果因为支付渠道原因或�?�系统原因还在等待支付结果确认，�?终交易是否成功以服务端异步�?�知为准（小概率状�?�）
					if (TextUtils.equals(resultStatus, "8000")) {
						Toast.makeText(PayDemoActivity.this, "支付结果确认�?",
								Toast.LENGTH_SHORT).show();

					} else {
						// 其他值就可以判断为支付失败，包括用户主动取消支付，或者系统返回的错误
						Toast.makeText(PayDemoActivity.this, "支付失败",
								Toast.LENGTH_SHORT).show();

					}
				}
				break;
			}
			default:
				break;
			}
		};
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.pay_external);
		ib_back=(ImageButton)findViewById(R.id.ib_fanhui);
		ib_back.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
//				finish();
//				if (!couponid.equals("0")) {
//					couponsdialog();
//				}else {
					finish();
//				}
			}
		});
		tv_price=(TextView)findViewById(R.id.tv_price);
		price = getIntent().getStringExtra("price");		
		tv_price.setText("￥"+price);
		tv_shengyu=(TextView)findViewById(R.id.tv_shengyu);
		rl_youhuiquan=(RelativeLayout)findViewById(R.id.rl_youhuiquan);
		Coupons();
		rl_youhuiquan.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(PayDemoActivity.this, UsecouponsActivity.class);
				String orderid = getIntent().getStringExtra("orderid");
				intent.putExtra("orderid", orderid);
				intent.putExtra("price", price);
				startActivityForResult(intent, 2);
				//	finish();
			}
		});
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
//		Log.i("zq", "requestCode---------"+requestCode);
//		Log.i("zq", "resultCode---------"+resultCode);
		//		Log.i("zq", "data---------"+data.getStringExtra("orderid"));
		switch(resultCode){  
		case 1:  
			tv_shengyu.setText("可用"+length+"张");
			price=getIntent().getStringExtra("price");
			tv_price.setText("￥"+price);
		case 2:  
			Bundle bundle = data.getExtras();  
			off = bundle.getString("off");
			couponid = bundle.getString("couponid");
			price = getIntent().getStringExtra("price");
			if (!off.equals("0")) {
				rl_youhuiquan.setVisibility(View.VISIBLE);
				//off = getIntent().getStringExtra("off");
				Log.i("zq", "off-----"+off);
				Log.i("zq", "couponid-----"+couponid);
				double youhui = Double.parseDouble(price)-Integer.parseInt(off);
				if (youhui<=0) {
					tv_price.setText("￥"+"0");
				}else {
					tv_price.setText("￥"+youhui);
					price=""+youhui;
				}
				
				tv_shengyu.setText("减"+off+"元");
			}

		}  
	}
	private void alipay(){
		orderid = getIntent().getStringExtra("orderid");
		Log.i("shi", "id---"+orderid);
		if(httptools==null){
			httptools = new HttpTools(getApplicationContext());
		}
		httptools.aliPay(token,orderid,"1", new JsonHttpResponseHandler(){
			public void onSuccess(int statusCode, Header[] headers,
					JSONObject response) {
				// TODO Auto-generated method stub
				super.onSuccess(statusCode, headers, response);
				try {
					boolean code = response.getBoolean("code");
					String msg = response.getString("msg");
//					Log.i("zq", "balance---"+response.toString());
					if (code == true) {
//						String data=response.getString("data");
//						Toast.makeText(PayDemoActivity.this, msg, Toast.LENGTH_SHORT).show();
						//										view.setBackgroundResource(R.drawable.shouchang1);
//						tv_balance.setText("�?"+data);
						Intent intent = new Intent();
						intent.setClass(getApplicationContext(), FanqiedingcanActivity.class);
						startActivity(intent);
						finish();
					} else {
						Toast.makeText(PayDemoActivity.this, msg, Toast.LENGTH_SHORT).show();
					}
				} catch (JSONException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		});
	}
	private void useconpons() {
		SharedPreferences sp=getSharedPreferences("spReg", Context.MODE_PRIVATE);
		token = sp.getString("data", "");

		//		Log.i("zq", "balancepayorderid---"+orderid);
		if (httptools == null) {
			httptools = new HttpTools(PayDemoActivity.this);
		}
		httptools.updateCoupon(token,couponid,orderid,new JsonHttpResponseHandler() {

			@Override
			public void onSuccess(int statusCode, Header[] headers,
					JSONObject response) {
				super.onSuccess(statusCode, headers, response);
				try {
					boolean code = response.getBoolean("code");
					String msg = response.getString("msg");
//					Log.i("zq", "balancepay---"+response.toString());
					if (code == true) {
						//						String data=response.getString("data");
//						Toast.makeText(BalancepayActivity.this, msg, Toast.LENGTH_SHORT).show();
//						Intent intent = new Intent();
//						intent.setClass(BalancepayActivity.this, FanqiedingcanActivity.class);
//						startActivity(intent);
						//										view.setBackgroundResource(R.drawable.shouchang1);
						//						tv_balance.setText("�?"+data+"�?");
						Log.i("zq", "useconpons----成功");
						alipay();
					} else {
						Toast.makeText(PayDemoActivity.this, msg, Toast.LENGTH_SHORT).show();
					}
				} catch (JSONException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		});
	}
	
	
	/**优惠券弹�?*/
	private void couponsdialog() {

		final Dialog dialog = new Dialog(PayDemoActivity.this);
		dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

		iscatview = LayoutInflater.from(PayDemoActivity.this).inflate(
				R.layout.dialog_phone, null);
		//			TextView tital = (TextView) iscatview.findViewById(R.id.tital);
		//			TextView tv_phone = (TextView) iscatview.findViewById(R.id.tv_phone);
		TextView tital = (TextView) iscatview.findViewById(R.id.tital);
		TextView tv_no = (TextView) iscatview.findViewById(R.id.tv_no2);
		TextView tv_yes = (TextView) iscatview.findViewById(R.id.tv_yes2);
		//			tv_phone.setText(phone);
		//			tv_phone.setVisibility(View.GONE);
		//			tital.setText("该上下班有人加入，拼车是否完�??");
		tital.setText("优惠券已使用，是否�??出支付？");
		tv_no.setText("取消");
		tv_yes.setText("确定");
		dialog.setContentView(iscatview);
		dialog.show();
		tv_no.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
//				Log.i("ceshi", "qucan---"+qucan);
//				Log.i("ceshi", "fee---"+fee);
				dialog.dismiss();
			}
		});
		tv_yes.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				finish();
				dialog.dismiss();
			}
		});
	}
	
	private void Coupons() {
		SharedPreferences sp=getSharedPreferences("spReg", Context.MODE_PRIVATE);
		token = sp.getString("data", "");
		String orderid=getIntent().getStringExtra("orderid");
		//		Log.i("zq", "balancepayorderid---"+orderid);
		if (httptools == null) {
			httptools = new HttpTools(PayDemoActivity.this);
		}
		httptools.getCoupons(token,orderid, new JsonCoupons());
	}
	public class JsonCoupons extends JsonHttpResponseHandler {
		@Override
		public void onSuccess(int statusCode, Header[] headers,
				JSONArray response) {
			// TODO Auto-generated method stub
			super.onSuccess(statusCode, headers, response);
			try {
				Log.i("info",response.toString());
				for (int i = 0; i < response.length(); i++) {
					JSONObject data = response.getJSONObject(i);
					String id=data.getString("id");
					String couponno=data.getString("couponno");
					String more=data.getString("more");
					String off=data.getString("off");
					//					typelist.add(new AddressEntity(id, name, lot, lat));
				}
				length=response.length();
				if (response.length()==0) {
					rl_youhuiquan.setVisibility(View.GONE);
				}else {
					rl_youhuiquan.setVisibility(View.VISIBLE);
					//					if (off.equals("null")) {
					//						tv_shengyu.setText("�?"+off);
					//					}else {
					tv_shengyu.setText("可用"+response.length()+"张");
					//					}

				}
			} catch (JSONException e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * call alipay sdk pay. 调用SDK支付
	 * 
	 */
	
	public void pay(View v) {
//		if (!couponid.equals("0")) {
//			useconpons();
//			Log.i("zq", "useconpons-------");
//		}else {
//			alipay();
//			Log.i("zq", "alipay-------");
//		}
		if (flag==true) {
//			Log.i("ceshi", "flag-------true");
		if (TextUtils.isEmpty(PARTNER) || TextUtils.isEmpty(RSA_PRIVATE)
				|| TextUtils.isEmpty(SELLER)) {
			new AlertDialog.Builder(this)
			.setTitle("警告")
			.setMessage("�?要配置PARTNER | RSA_PRIVATE| SELLER")
			.setPositiveButton("确定",
					new DialogInterface.OnClickListener() {
				public void onClick(
						DialogInterface dialoginterface, int i) {
					//
					finish();
				}
			}).show();
			return;
		}

		String orderInfo = getOrderInfo("久瑞餐饮", "17度E智慧点餐",price );

		/**
		 * 特别注意，这里的签名逻辑�?要放在服务端，切勿将私钥泄露在代码中�?
		 */
		String sign = sign(orderInfo);
		try {
			/**
			 * 仅需对sign 做URL编码
			 */
			sign = URLEncoder.encode(sign, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		/**
		 * 完整的符合支付宝参数规范的订单信�?
		 */
		final String payInfo = orderInfo + "&sign=\"" + sign + "\"&"
				+ getSignType();

		Runnable payRunnable = new Runnable() {

			@Override
			public void run() {
				// 构�?�PayTask 对象
				PayTask alipay = new PayTask(PayDemoActivity.this);
				// 调用支付接口，获取支付结�?
				String result = alipay.pay(payInfo, true);

				Message msg = new Message();
				msg.what = SDK_PAY_FLAG;
				msg.obj = result;
				mHandler.sendMessage(msg);
			}
		};

		// 必须异步调用
		Thread payThread = new Thread(payRunnable);
		payThread.start();
	}
		flag=false;
}

	/**
	 * get the sdk version. 获取SDK版本�?
	 * 
	 */
	public void getSDKVersion() {
		PayTask payTask = new PayTask(this);
		String version = payTask.getVersion();
		Toast.makeText(this, version, Toast.LENGTH_SHORT).show();
	}

	/**
	 * create the order info. 创建订单信息
	 * 
	 */
	private String getOrderInfo(String subject, String body, String price) {

		// 签约合作者身份ID
		String orderInfo = "partner=" + "\"" + PARTNER + "\"";

		// 签约卖家支付宝账�?
		orderInfo += "&seller_id=" + "\"" + SELLER + "\"";

		// 商户网站唯一订单�?
		orderInfo += "&out_trade_no=" + "\"" + getOutTradeNo() + "\"";

		// 商品名称
		orderInfo += "&subject=" + "\"" + subject + "\"";

		// 商品详情
		orderInfo += "&body=" + "\"" + body + "\"";

		// 商品金额
		orderInfo += "&total_fee=" + "\"" + price + "\"";

		// 服务器异步�?�知页面路径
		orderInfo += "&notify_url=" + "\"" + "http://notify.msp.hk/notify.htm"
				+ "\"";

		// 服务接口名称�? 固定�?
		orderInfo += "&service=\"mobile.securitypay.pay\"";

		// 支付类型�? 固定�?
		orderInfo += "&payment_type=\"1\"";

		// 参数编码�? 固定�?
		orderInfo += "&_input_charset=\"utf-8\"";

		// 设置未付款交易的超时时间
		// 默认30分钟，一旦超时，该笔交易就会自动被关闭�??
		// 取�?�范围：1m�?15d�?
		// m-分钟，h-小时，d-天，1c-当天（无论交易何时创建，都在0点关闭）�?
		// 该参数数值不接受小数点，�?1.5h，可转换�?90m�?
		orderInfo += "&it_b_pay=\"30m\"";

		// extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支�?
		// orderInfo += "&extern_token=" + "\"" + extern_token + "\"";

		// 支付宝处理完请求后，当前页面跳转到商户指定页面的路径，可�?
		orderInfo += "&return_url=\"m.alipay.com\"";

		return orderInfo;
	}

	/**
	 * get the out_trade_no for an order. 生成商户订单号，该�?�在商户端应保持唯一（可自定义格式规范）
	 * 
	 */
	private String getOutTradeNo() {
		SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss",
				Locale.getDefault());
		Date date = new Date();
		String key = format.format(date);

		Random r = new Random();
		key = key + r.nextInt();
		key = key.substring(0, 15);
		return key;
	}

	/**
	 * sign the order info. 对订单信息进行签�?
	 * 
	 * @param content
	 *            待签名订单信�?
	 */
	private String sign(String content) {
		return SignUtils.sign(content, RSA_PRIVATE);
	}

	/**
	 * get the sign type we use. 获取签名方式
	 * 
	 */
	private String getSignType() {
		return "sign_type=\"RSA\"";
	}

}
